---
title: SAIF.Business.Claim.Legal business rules
summary: Enumerated business rules with per-rule trigger, enforcement, and outcomes.
status: draft
owner: SAIF Documentation Generator
last_reviewed: 2026-08-21
library: SAIF.Business.Claim.Legal
reference_type: embedded
---

# SAIF.Business.Claim.Legal business rules

This page captures business rules enforced by this library. Approximately 100 rules were inventoried via `<RuleData>` attributes registered in each class's `AddBusinessRules()`; the rules below are the substantive ones identified with source-line evidence. Rules of `RuleType.Warning` are noted as warnings; all others block save.

## BR-LC-001 Case type is required

| Field | Value |
| --- | --- |
| **Statement** | Case type is required. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-002 Request type is required

| Field | Value |
| --- | --- |
| **Statement** | Request type is required. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-003 Received date is required and may not be in the future

| Field | Value |
| --- | --- |
| **Statement** | Received date is required and may not be in the future. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-004 Postmark date must be on or before the received date and

| Field | Value |
| --- | --- |
| **Statement** | Postmark date must be on or before the received date and may not be in the future. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-005 Federal cases are exempt from the postmarkreceived date

| Field | Value |
| --- | --- |
| **Statement** | Federal cases are exempt from the postmark/received date comparison. |
| **Trigger** | Save/validate legal case where case is federal |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1649-1652` |
| **Outcome** | Rule bypassed |
| **Source** | LegalNet\clsLegalCase.vb:1649-1652 |

---

## BR-LC-006 Request date must be on or before the received date

| Field | Value |
| --- | --- |
| **Statement** | Request date must be on or before the received date. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-007 At least one issue must be present on the case

| Field | Value |
| --- | --- |
| **Statement** | At least one issue must be present on the case. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-008 WCB case numbers must match the format 99-99999

| Field | Value |
| --- | --- |
| **Statement** | WCB case numbers must match the format `99-99999`. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-009 DCBS case numbers must match 99-99999H or H99-999

| Field | Value |
| --- | --- |
| **Statement** | DCBS case numbers must match `99-99999H` or `H99-999`. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-010 Case number must not duplicate an existing case (checked

| Field | Value |
| --- | --- |
| **Statement** | Case number must not duplicate an existing case (checked via `clsFindCase.GetCases`). |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-011 Case evaluation score must be between 1 and 5 in 0.5

| Field | Value |
| --- | --- |
| **Statement** | Case evaluation score must be between 1 and 5 in 0.5 increments. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-LC-012 Acknowledge, OAR, reconsideration and file-create dates

| Field | Value |
| --- | --- |
| **Statement** | Acknowledge, OAR, reconsideration and file-create dates must fall within their allowed windows. |
| **Trigger** | Save/validate legal case |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCase.vb:1632-1734` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCase.vb:1632-1734 |

---

## BR-SC-001 Schedule type and status are required

| Field | Value |
| --- | --- |
| **Statement** | Schedule type and status are required. |
| **Trigger** | Save/validate schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-002 Schedule date must be in the future for schedules in Set

| Field | Value |
| --- | --- |
| **Statement** | Schedule date must be in the future for schedules in `Set` or `Reset` status. |
| **Trigger** | Save/validate schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-003 A schedule may not have both a SAIF attorney and outside

| Field | Value |
| --- | --- |
| **Statement** | A schedule may not have both a SAIF attorney and outside counsel. |
| **Trigger** | Save/validate schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-004 Outside counsel requires both a firm and an attorney

| Field | Value |
| --- | --- |
| **Statement** | Outside counsel requires both a firm and an attorney. |
| **Trigger** | Save/validate schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-005 Schedule date and time are required

| Field | Value |
| --- | --- |
| **Statement** | Schedule date and time are required. |
| **Trigger** | Save/validate schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-006 Schedule time must be between 7:00 AM and 6:00 PM

| Field | Value |
| --- | --- |
| **Statement** | Schedule time must be between 7:00 AM and 6:00 PM. |
| **Trigger** | Save/validate schedule (LevelTwo) |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-007 Duration must be consistent with the scheduled time

| Field | Value |
| --- | --- |
| **Statement** | Duration must be consistent with the scheduled time. |
| **Trigger** | Save/validate schedule (LevelTwo) |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-008 Duration is required

| Field | Value |
| --- | --- |
| **Statement** | Duration is required. |
| **Trigger** | Save/validate schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:880-941` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:880-941 |

---

## BR-SC-009 A case may have only one schedule in Set or Reset status

| Field | Value |
| --- | --- |
| **Statement** | A case may have only one schedule in `Set` or `Reset` status. |
| **Trigger** | Save/validate schedule collection |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalSchedule.vb:1277` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalSchedule.vb:1277 |

---

## BR-AP-001 Appeal number is required

| Field | Value |
| --- | --- |
| **Statement** | Appeal number is required. |
| **Trigger** | Save/validate appeal |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:724-764` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsAppeal.vb:724-764 |

---

## BR-AP-002 Respondent code is required

| Field | Value |
| --- | --- |
| **Statement** | Respondent code is required. |
| **Trigger** | Save/validate appeal |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:724-764` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsAppeal.vb:724-764 |

---

## BR-AP-003 Filed date is required and must be valid

| Field | Value |
| --- | --- |
| **Statement** | Filed date is required and must be valid. |
| **Trigger** | Save/validate appeal |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:724-764` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsAppeal.vb:724-764 |

---

## BR-AP-004 Brief 1, 2 and 3 due and filed dates must be valid dates

| Field | Value |
| --- | --- |
| **Statement** | Brief 1, 2 and 3 due and filed dates must be valid dates. |
| **Trigger** | Save/validate appeal |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:724-764` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsAppeal.vb:724-764 |

---

## BR-AP-005 Brief 1 duefiled dates cascade to Brief 2, which cascades

| Field | Value |
| --- | --- |
| **Statement** | Brief 1 due/filed dates cascade to Brief 2, which cascades to Brief 3, using review-level day counts (WCBA 21/14, COA 49/21, SCRT 28). |
| **Trigger** | Setting Brief 1 due or filed date |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:36-62,305-390` |
| **Outcome** | Dependent due dates recalculated |
| **Source** | LegalNet\clsAppeal.vb:36-62,305-390 |

---

## BR-AP-006 Extensions are permitted only when the review level is not

| Field | Value |
| --- | --- |
| **Statement** | Extensions are permitted only when the review level is not `WCBA`. |
| **Trigger** | Adding an appeal extension |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:305-390` |
| **Outcome** | Extension blocked |
| **Source** | LegalNet\clsAppeal.vb:305-390 |

---

## BR-AP-007 Granted extension days are added to the Brief 2 and Brief 3

| Field | Value |
| --- | --- |
| **Statement** | Granted extension days are added to the Brief 2 and Brief 3 due dates on save. |
| **Trigger** | Appeal save |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAppeal.vb:372-390` |
| **Outcome** | Due dates extended |
| **Source** | LegalNet\clsAppeal.vb:372-390 |

---

## BR-CC-001 Service date and authorized date must be valid

| Field | Value |
| --- | --- |
| **Statement** | Service date and authorized date must be valid. |
| **Trigger** | Save/validate case cost |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseCost.vb:539-606` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseCost.vb:539-606 |

---

## BR-CC-002 Service or authorized dates more than one year old raise a

| Field | Value |
| --- | --- |
| **Statement** | Service or authorized dates more than one year old raise a warning. |
| **Trigger** | Save/validate case cost |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseCost.vb:539-606` |
| **Outcome** | Warning (`RuleType.Warning`) |
| **Source** | LegalNet\clsCaseCost.vb:539-606 |

---

## BR-CC-003 A payee firm or payee person is required

| Field | Value |
| --- | --- |
| **Statement** | A payee firm or payee person is required. |
| **Trigger** | Save/validate case cost |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseCost.vb:539-606` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseCost.vb:539-606 |

---

## BR-CC-004 Service code, authorizer, and (when applicable)

| Field | Value |
| --- | --- |
| **Statement** | Service code, authorizer, and (when applicable) cancelled-by are required. |
| **Trigger** | Save/validate case cost |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseCost.vb:539-606` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseCost.vb:539-606 |

---

## BR-CC-005 Amounts and hours are required and must be valid

| Field | Value |
| --- | --- |
| **Statement** | Amounts and hours are required and must be valid. |
| **Trigger** | Save/validate case cost |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseCost.vb:539-606` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseCost.vb:539-606 |

---

## BR-CS-001 Claim number must be 7 characters and exclude the check

| Field | Value |
| --- | --- |
| **Statement** | Claim number must be 7 characters and exclude the check character. |
| **Trigger** | Case search |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseSearchCriteria.vb:38-54` |
| **Outcome** | Search blocked |
| **Source** | LegalNet\clsCaseSearchCriteria.vb:38-54 |

---

## BR-CS-002 Last name is required when searching by name

| Field | Value |
| --- | --- |
| **Statement** | Last name is required when searching by name. |
| **Trigger** | Case search |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseSearchCriteria.vb:38-54` |
| **Outcome** | Search blocked |
| **Source** | LegalNet\clsCaseSearchCriteria.vb:38-54 |

---

## BR-CS-003 Policy number must be fewer than 9 characters

| Field | Value |
| --- | --- |
| **Statement** | Policy number must be fewer than 9 characters. |
| **Trigger** | Case search |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseSearchCriteria.vb:38-54` |
| **Outcome** | Search blocked |
| **Source** | LegalNet\clsCaseSearchCriteria.vb:38-54 |

---

## BR-CS-004 SSN must be entered in full, with dashes

| Field | Value |
| --- | --- |
| **Statement** | SSN must be entered in full, with dashes. |
| **Trigger** | Case search |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseSearchCriteria.vb:38-54` |
| **Outcome** | Search blocked |
| **Source** | LegalNet\clsCaseSearchCriteria.vb:38-54 |

---

## BR-CS-005 Check number must be valid

| Field | Value |
| --- | --- |
| **Statement** | Check number must be valid. |
| **Trigger** | Case search |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseSearchCriteria.vb:38-54` |
| **Outcome** | Search blocked |
| **Source** | LegalNet\clsCaseSearchCriteria.vb:38-54 |

---

## BR-CO-001 A consolidation must contain at least two cases

| Field | Value |
| --- | --- |
| **Statement** | A consolidation must contain at least two cases. |
| **Trigger** | Consolidate cases |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsConsolidations.vb:246` |
| **Outcome** | Operation blocked |
| **Source** | LegalNet\clsConsolidations.vb:246 |

---

## BR-FL-001 A file location must specify either a person or a location,

| Field | Value |
| --- | --- |
| **Statement** | A file location must specify either a person or a location, never both. |
| **Trigger** | Save/validate file location |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalFileLocation.vb:385-389` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalFileLocation.vb:385-389 |

---

## BR-MD-001 Mailed date must be today or later

| Field | Value |
| --- | --- |
| **Statement** | Mailed date must be today or later. |
| **Trigger** | Save/validate mail date |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsMailDate.vb:302-306` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsMailDate.vb:302-306 |

---

## BR-MD-002 Mailed date more than 3 days in the future raises a warning

| Field | Value |
| --- | --- |
| **Statement** | Mailed date more than 3 days in the future raises a warning. |
| **Trigger** | Save/validate mail date |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsMailDate.vb:302-306` |
| **Outcome** | Warning |
| **Source** | LegalNet\clsMailDate.vb:302-306 |

---

## BR-LCE-001 Legal case evaluation due date may not be more than 30 days

| Field | Value |
| --- | --- |
| **Statement** | Legal case evaluation due date may not be more than 30 days in the future. |
| **Trigger** | Save/validate evaluation |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCaseEvaluation.vb:401-405` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCaseEvaluation.vb:401-405 |

---

## BR-LCE-002 Evaluation completed date may not be in the future

| Field | Value |
| --- | --- |
| **Statement** | Evaluation completed date may not be in the future. |
| **Trigger** | Save/validate evaluation |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsLegalCaseEvaluation.vb:401-405` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsLegalCaseEvaluation.vb:401-405 |

---

## BR-OC-001 Order type is required

| Field | Value |
| --- | --- |
| **Statement** | Order type is required. |
| **Trigger** | Save/validate case outcome |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseOutcome.vb:436-444` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseOutcome.vb:436-444 |

---

## BR-OC-002 Signed and filed dates must be after 01011980 and not in

| Field | Value |
| --- | --- |
| **Statement** | Signed and filed dates must be after 01/01/1980 and not in the future. |
| **Trigger** | Save/validate case outcome |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseOutcome.vb:436-444` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseOutcome.vb:436-444 |

---

## BR-OI-001 Issue type is required on an outcome issue

| Field | Value |
| --- | --- |
| **Statement** | Issue type is required on an outcome issue. |
| **Trigger** | Save/validate outcome issue |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsOutcomeIssue.vb:460` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsOutcomeIssue.vb:460 |

---

## BR-OI-002 Exactly one outcome issue may be marked primary

| Field | Value |
| --- | --- |
| **Statement** | Exactly one outcome issue may be marked primary. |
| **Trigger** | Save/validate outcome issue collection |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsOutcomeIssue.vb:717` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsOutcomeIssue.vb:717 |

---

## BR-OS-001 Outcome staff entries require their identifying fields

| Field | Value |
| --- | --- |
| **Statement** | Outcome staff entries require their identifying fields. |
| **Trigger** | Save/validate outcome staff |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsOutcomeStaff.vb:276` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsOutcomeStaff.vb:276 |

---

## BR-CN-001 Case note required fields must be supplied

| Field | Value |
| --- | --- |
| **Statement** | Case note required fields must be supplied. |
| **Trigger** | Save/validate case note |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCaseNote.vb:245-250` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsCaseNote.vb:245-250 |

---

## BR-AK-001 Acknowledgement required fields and date windows must be

| Field | Value |
| --- | --- |
| **Statement** | Acknowledgement required fields and date windows must be satisfied. |
| **Trigger** | Save/validate acknowledgement |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAcknowledge.vb:156-182` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsAcknowledge.vb:156-182 |

---

## BR-OLP-001 Other legal party required fields must be supplied

| Field | Value |
| --- | --- |
| **Statement** | Other legal party required fields must be supplied. |
| **Trigger** | Save/validate other legal party |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsOtherLegalParty.vb:396` |
| **Outcome** | Save blocked |
| **Source** | LegalNet\clsOtherLegalParty.vb:396 |

---

## BR-AT-001 Attorney, attorney type and effective date are required

| Field | Value |
| --- | --- |
| **Statement** | Attorney, attorney type and effective date are required. |
| **Trigger** | Save/validate attorney profile |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneyProfile.vb:505-521` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneyProfile.vb:505-521 |

---

## BR-AT-002 Expiration date must be on or after the effective date

| Field | Value |
| --- | --- |
| **Statement** | Expiration date must be on or after the effective date. |
| **Trigger** | Save/validate attorney profile |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneyProfile.vb:505-521` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneyProfile.vb:505-521 |

---

## BR-AT-003 An attorney may not be duplicated in the profile table

| Field | Value |
| --- | --- |
| **Statement** | An attorney may not be duplicated in the profile table. |
| **Trigger** | Save/validate attorney profile |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneyProfile.vb:505-521` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneyProfile.vb:505-521 |

---

## BR-AS-001 Attorney, reason and duration are required on an attorney

| Field | Value |
| --- | --- |
| **Statement** | Attorney, reason and duration are required on an attorney schedule. |
| **Trigger** | Save/validate attorney schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneySchedule.vb:311-336` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneySchedule.vb:311-336 |

---

## BR-AS-002 Begin and end dates must be in the future

| Field | Value |
| --- | --- |
| **Statement** | Begin and end dates must be in the future. |
| **Trigger** | Save/validate attorney schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneySchedule.vb:311-336` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneySchedule.vb:311-336 |

---

## BR-AS-003 Begin date must be before end date

| Field | Value |
| --- | --- |
| **Statement** | Begin date must be before end date. |
| **Trigger** | Save/validate attorney schedule |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneySchedule.vb:311-336` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneySchedule.vb:311-336 |

---

## BR-APA-001 Attorney policy assignment required fields must be supplied

| Field | Value |
| --- | --- |
| **Statement** | Attorney policy assignment required fields must be supplied. |
| **Trigger** | Save/validate policy assignment |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsAttorneyPolicyAssignment.vb:446-451` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsAttorneyPolicyAssignment.vb:446-451 |

---

## BR-HL-001 Hearing location code and name are required

| Field | Value |
| --- | --- |
| **Statement** | Hearing location code and name are required. |
| **Trigger** | Save/validate hearing location |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsHearingLocation.vb:606-620` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsHearingLocation.vb:606-620 |

---

## BR-HL-002 State must be a valid state code

| Field | Value |
| --- | --- |
| **Statement** | State must be a valid state code. |
| **Trigger** | Save/validate hearing location |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsHearingLocation.vb:606-620` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsHearingLocation.vb:606-620 |

---

## BR-HL-003 City must match the allowed alphabetic pattern

| Field | Value |
| --- | --- |
| **Statement** | City must match the pattern `^([A-Za-z]+ ?)*$`. |
| **Trigger** | Save/validate hearing location |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsHearingLocation.vb:606-620` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsHearingLocation.vb:606-620 |

---

## BR-OF-001 Other firm required fields must be supplied

| Field | Value |
| --- | --- |
| **Statement** | Other firm required fields must be supplied. |
| **Trigger** | Save/validate other firm |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsOtherFirm.vb:441-447` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsOtherFirm.vb:441-447 |

---

## BR-OF-002 State must be valid against all state values

| Field | Value |
| --- | --- |
| **Statement** | State must be valid (validated against the `ALL_STATES` lookup) and city must match the city pattern. |
| **Trigger** | Save/validate other firm |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsOtherFirm.vb:441-447` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsOtherFirm.vb:441-447 |

---

## BR-LP-001 Legal person required fields must be supplied

| Field | Value |
| --- | --- |
| **Statement** | Legal person required fields must be supplied. |
| **Trigger** | Save/validate legal person |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsLegalPerson.vb:265` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsLegalPerson.vb:265 |

---

## BR-LPT-001 Legal person type required fields must be supplied

| Field | Value |
| --- | --- |
| **Statement** | Legal person type required fields must be supplied. |
| **Trigger** | Save/validate legal person type |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsLegalPersonType.vb:377-381` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsLegalPersonType.vb:377-381 |

---

## BR-OTR-001 Out-of-town rotation assignment required fields and date

| Field | Value |
| --- | --- |
| **Statement** | Out-of-town rotation assignment required fields and date ranges must be valid. |
| **Trigger** | Save/validate rotation assignment |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `TableMaint\clsOutOFTownRotationAssgn.vb:351-361` |
| **Outcome** | Save blocked |
| **Source** | TableMaint\clsOutOFTownRotationAssgn.vb:351-361 |

---

## BR-ASG-001 Legal case evaluation due date is Today NextWorkDay 18

| Field | Value |
| --- | --- |
| **Statement** | Legal case evaluation due date is `Today.NextWorkDay(18)` for BND/MED case types, otherwise `Today.AddDays(15)`. |
| **Trigger** | Assignment result processing |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAssignmentProcess.vb:398-410` |
| **Outcome** | Due date computed |
| **Source** | LegalNet\clsAssignmentProcess.vb:398-410 |

---

## BR-ASG-002 Assignment result codes CA and CAC trigger

| Field | Value |
| --- | --- |
| **Statement** | Assignment result codes `CA` and `CAC` trigger file-location and LCE updates; `CAC` additionally sends a conflict notification. |
| **Trigger** | Assignment result processing |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsAssignmentProcess.vb:454+` |
| **Outcome** | Downstream updates/notification |
| **Source** | LegalNet\clsAssignmentProcess.vb:454+ |

---

## BR-CF-001 File-create evaluations are due +15 days, or +18 working

| Field | Value |
| --- | --- |
| **Statement** | File-create evaluations are due +15 days, or +18 working days for BND/MED, and are excused when a reconsideration packet was received. |
| **Trigger** | Create file / mailing |
| **Enforcement** | `AddBusinessRules()` rule registration; enforced at `LegalNet\clsCreateFile.vb` |
| **Outcome** | Due date computed or excused |
| **Source** | LegalNet\clsCreateFile.vb |

---

## Stored procedure business rules

Rules sourced from real Oracle PL/SQL source retrieved via the Legends CLI for `pk80001_legalnet`, `pk80005_assignment`, and `pk82289_legalnet_letters` (see [Procedures](procedures/index.md)). `pk82289_legalnet_letters` rules are inferred from the calling VB.NET code since only the package specification was retrieved for that package (no body).

## BR-PKG1-001 Case search excludes closed cases by default

| Field | Value |
| --- | --- |
| **Statement** | Case search excludes closed legal cases unless explicitly included. |
| **Trigger** | `Casesearch` is invoked with `includeClosed <> 'Y'`. |
| **Enforcement** | Filters out rows where `CASE_STATUS_CODE = 'CLOSE'`. |
| **Outcome** | Closed cases are hidden from default search results. |
| **Source** | `pk80001_legalnet.Casesearch` |

---

## BR-PKG1-002 Case status changes cascade to consolidated secondary cases

| Field | Value |
| --- | --- |
| **Statement** | Updating a consolidation primary's status propagates to its secondary cases. |
| **Trigger** | `updateCaseStatus` changes status of a case acting as a consolidation primary. |
| **Enforcement** | Applies the same status update to all linked secondary cases. |
| **Outcome** | Consolidated case group stays status-consistent. |
| **Source** | `pk80001_legalnet.updateCaseStatus` |

---

## BR-PKG1-003 Hearing sequence number fallback order

| Field | Value |
| --- | --- |
| **Statement** | The case's most recent hearing sequence is resolved via a defined fallback order. |
| **Trigger** | `updateHearingSeqNum` recalculates `MOST_RECENT_HEARING_SEQ_NUM`. |
| **Enforcement** | Uses consolidation primary's most recent HEAR schedule first; else own HEAR; else own CCALL/INCON/MED. |
| **Outcome** | Correct hearing reference is maintained even across consolidation. |
| **Source** | `pk80001_legalnet.updateHearingSeqNum` |

---

## BR-PKG1-004 Appeal deletion cascades status and file location reversion

| Field | Value |
| --- | --- |
| **Statement** | Deleting an appeal reverts dependent case status and file location state. |
| **Trigger** | `deleteappeal` removes an APPEAL row. |
| **Enforcement** | Deletes linked schedule, recalculates hearing sequence, conditionally calls `popcasestatus`/`popfilelocation`. |
| **Outcome** | Case status/file location reflect pre-appeal state. |
| **Source** | `pk80001_legalnet.deleteappeal`, `popcasestatus`, `popfilelocation` |

---

## BR-PKG1-005 Assigned attorney resolution fallback order

| Field | Value |
| --- | --- |
| **Statement** | Assigned attorney is resolved via a fallback chain. |
| **Trigger** | `get_asgn_atty`/`get_asgn_atty_id` executed for a legal case. |
| **Enforcement** | Most recent appeal's attorney → scheduled hearing's attorney → assigned other-firm name. |
| **Outcome** | Best-available attorney is always returned. |
| **Source** | `pk80001_legalnet.get_asgn_atty`, `get_asgn_atty_id` |

---

## BR-PKG1-006 Case number display priority

| Field | Value |
| --- | --- |
| **Statement** | Displayed case number follows a fixed priority of external case numbering systems. |
| **Trigger** | `get_case_num` executed for a legal case. |
| **Enforcement** | Returns first non-null in order: WCB, DCBS, OWCP, OALJ, BRB. |
| **Outcome** | Consistent case number display across UI. |
| **Source** | `pk80001_legalnet.get_case_num` |

---

## BR-PKG1-007 OAR due date and case weight calculation

| Field | Value |
| --- | --- |
| **Statement** | OAR due date and case weight are computed from request attributes. |
| **Trigger** | `UPDATE_LEGALCASE_REQUEST` sets request fields on a legal case. |
| **Enforcement** | OAR due date = postmark date + 10 days, only if no existing reconsideration-flagged request issue; case weight = 3 if stress claim else 1. |
| **Outcome** | Correct due-date and workload weighting for OAR-tracked cases. |
| **Source** | `pk80001_legalnet.UPDATE_LEGALCASE_REQUEST` |

---

## BR-PKG1-008 LCE excused upsert logic

| Field | Value |
| --- | --- |
| **Statement** | LCE excused flag changes use conditional update-or-insert logic. |
| **Trigger** | `update_lce_Excused` sets the LCE excused flag. |
| **Enforcement** | Updates existing LCE row only if flag changed; inserts new row if none exists and new flag is 'Y'. |
| **Outcome** | LCE excused state stays accurate without duplicate rows. |
| **Source** | `pk80001_legalnet.update_lce_Excused` |

---

## BR-PKG1-009 OAR and reconsideration mail eligibility

| Field | Value |
| --- | --- |
| **Statement** | Cases become eligible for OAR/reconsideration mailing based on flag and date state. |
| **Trigger** | `mailDateList` builds the mailing worklist. |
| **Enforcement** | OAR-eligible: `MAIL_OAR_FLAG='Y'`, not closed, `OAR_DUE_DATE` set, `OAR_MAILED_DATE` null. Recon-eligible: letter mailed date set, packet received date null. |
| **Outcome** | Accurate mail-processing worklists. |
| **Source** | `pk80001_legalnet.mailDateList` |

---

## BR-PKG1-010 Consolidated secondary cases inherit mail date from primary

| Field | Value |
| --- | --- |
| **Statement** | Secondary cases in a consolidation do not track mail dates independently. |
| **Trigger** | `setNoMailDate` invoked for a consolidated secondary case. |
| **Enforcement** | Mail date is inherited from the consolidation primary rather than set on the secondary. |
| **Outcome** | Mail-date tracking stays centralized on the primary case. |
| **Source** | `pk80001_legalnet.setNoMailDate` |

---

## BR-PKG1-011 File location is versioned by move date

| Field | Value |
| --- | --- |
| **Statement** | File location history is versioned and the latest move is authoritative. |
| **Trigger** | `getFileLocation`/`popfilelocation` access `LEGAL_FILE_LOCATION`. |
| **Enforcement** | Rows ordered by `move_date` descending; most recent is current location; reversion deletes that row. |
| **Outcome** | Accurate current-location tracking with reversible history. |
| **Source** | `pk80001_legalnet.getFileLocation`, `popfilelocation` |

---

## BR-PKG1-012 Consolidated secondary cases remain visible when closed

| Field | Value |
| --- | --- |
| **Statement** | Closed secondary cases in a consolidation remain visible in the consolidation view. |
| **Trigger** | `getConsolidatedCases` filters cases for display. |
| **Enforcement** | Include case if not closed and not secondary, OR if secondary regardless of closed status. |
| **Outcome** | Full consolidation membership stays visible even after closure. |
| **Source** | `pk80001_legalnet.getConsolidatedCases` |

---

## BR-PKG1-013 Consolidation link changes migrate or reset hearing sequence

| Field | Value |
| --- | --- |
| **Statement** | Changing a consolidation link updates hearing-sequence bookkeeping accordingly. |
| **Trigger** | `UpdateConsolidatedCase` reassigns or removes a primary/secondary link. |
| **Enforcement** | Reassignment migrates most recent hearing to new primary; removal recalculates secondary's own hearing sequence. |
| **Outcome** | Hearing sequence stays accurate after consolidation changes. |
| **Source** | `pk80001_legalnet.UpdateConsolidatedCase` |

---

## BR-PKG1-014 Final outcome recording drives case closure eligibility

| Field | Value |
| --- | --- |
| **Statement** | Recording a qualifying final outcome marks the case's outcome of record. |
| **Trigger** | `updateCaseOutcome`/`SetFinalOutcome` record a case outcome. |
| **Enforcement** | Qualifying order type/outcome becomes the case's final outcome of record. |
| **Outcome** | Case becomes eligible for closure processing. |
| **Source** | `pk80001_legalnet.updateCaseOutcome`, `SetFinalOutcome` |

---

## BR-PKG1-015 Outcome issue and outcome staff use upsert semantics

| Field | Value |
| --- | --- |
| **Statement** | Outcome issue/staff records are upserted rather than requiring separate insert/update calls. |
| **Trigger** | `updateOutcomeIssue`/`updateOutcomeStaff` called with a sequence number. |
| **Enforcement** | Updates if the sequence number exists in `OUTCOME_ISSUE`/`OUTCOME_STAFF`, else inserts. |
| **Outcome** | Simplified caller logic for outcome detail maintenance. |
| **Source** | `pk80001_legalnet.updateOutcomeIssue`, `updateOutcomeStaff` |

---

## BR-PKG2-001 Employer conflict blocks assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney with an active employer conflict cannot be assigned to a case for that employer's policy. |
| **Trigger** | `employer_flag = 'Y'` and the candidate attorney has an active `attorney_conflict` row for the claim's policy number. |
| **Enforcement** | `pk80005_assignment.employer_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `employer_result` is incremented; if the final result is non-zero the case is not assigned and result code `NAEMP` is recorded via `insert_results`. |
| **Source** | `pk80005_assignment.employer_conflict_check` |

---

## BR-PKG2-002 Adjuster conflict blocks assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney with an active conflict tied to the case's assigned adjuster cannot be assigned. |
| **Trigger** | `adjuster_flag = 'Y'` and the candidate attorney has an active `attorney_conflict` row matched to the case's adjuster by `user_id`. |
| **Enforcement** | `pk80005_assignment.adjuster_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `adjuster_result` is incremented; blocks assignment and records result code `NAADJ`. |
| **Source** | `pk80005_assignment.adjuster_conflict_check` |

---

## BR-PKG2-003 ALJ conflict blocks assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney with an active conflict tied to the hearing's ALJ cannot be assigned. |
| **Trigger** | `alj_flag = 'Y'` and the candidate has an active `attorney_conflict` row where `conflict_legal_person_seq_num` matches the hearing's ALJ. |
| **Enforcement** | `pk80005_assignment.alj_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `alj_result` is incremented; blocks assignment and records result code `NAALJ`. |
| **Source** | `pk80005_assignment.alj_conflict_check` |

---

## BR-PKG2-004 Opposing-representation conflict always checked

| Field | Value |
| --- | --- |
| **Statement** | An attorney who already represents the worker's side on a case can never be assigned to represent the employer/SAIF side on that same case, regardless of any other flag settings. |
| **Trigger** | The candidate's `atty_provider_location_seq_num` matches the claimant's worker-attorney firm location on the case; this check runs unconditionally with no enabling flag. |
| **Enforcement** | `pk80005_assignment.attorney_conflict_check`, called unconditionally from `assignIt`/`assignItBalanced`. |
| **Outcome** | `attorney_result` is incremented; blocks assignment and records result code `NAATT`. |
| **Source** | `pk80005_assignment.attorney_conflict_check` |

---

## BR-PKG2-005 Rotation duty blocks off-rotation assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney on out-of-town rotation duty for a different location cannot be assigned to a hearing at another location during their rotation window. |
| **Trigger** | `rotation_flag = 'Y'` and the candidate has an `out_of_town_rotation_assgn` row covering the hearing date for a different hearing location code. |
| **Enforcement** | `pk80005_assignment.rotation_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `rotation_result` is incremented; blocks assignment and records result code `NAROT`. |
| **Source** | `pk80005_assignment.rotation_conflict_check` |

---

## BR-PKG2-006 Calendar double-booking blocks assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney already scheduled elsewhere (different ALJ or location) at an overlapping date/duration cannot be double-booked to a new hearing. |
| **Trigger** | `calendar_flag` is `Y`, `H`, or `C` and the candidate has an overlapping `SET`/`RESET` schedule row at a different ALJ or hearing location. |
| **Enforcement** | `pk80005_assignment.calendar_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `calendar_result` is incremented; blocks assignment and records result code `NAC`. |
| **Source** | `pk80005_assignment.calendar_conflict_check` |

---

## BR-PKG2-007 Long-leave blackout window blocks assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney cannot be assigned to a hearing that falls within the blackout window surrounding one of their leave periods of more than 4 days (3 days before through 1 day after). |
| **Trigger** | `calendar_flag` is `Y`, `H`, or `C`, `in_code = 'Y'`, and today falls in the computed blackout window around a qualifying `LEAVE` entry in `attorney_schedule`. |
| **Enforcement** | `pk80005_assignment.vacation_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `vacation_result` is incremented; blocks assignment and records result code `NAVAC`. |
| **Source** | `pk80005_assignment.vacation_conflict_check` |

---

## BR-PKG2-008 Location conflict blocks assignment

| Field | Value |
| --- | --- |
| **Statement** | An attorney already booked elsewhere on the same date cannot be assigned to a hearing at a different location on that date. |
| **Trigger** | `location_flag = 'Y'` and the candidate has a `SET`/`RESET` schedule row on the same date at a different hearing location. |
| **Enforcement** | `pk80005_assignment.location_conflict_check`, called from `assignIt`/`assignItBalanced`. |
| **Outcome** | `location_result` is incremented; blocks assignment and records result code `NALCC`. |
| **Source** | `pk80005_assignment.location_conflict_check` |

---

## BR-PKG2-009 Weekly caseload floor exempts low-load attorneys

| Field | Value |
| --- | --- |
| **Statement** | Attorneys below their target hearing-day count for the week remain eligible for assignment even when the weekly caseload check is enabled. |
| **Trigger** | `weekly_case_load > 0` and `get_hearing_days` for the attorney is below a load-percent-derived minimum (1 day if `in_load_percent < 34`, 2 days if `< 67`). |
| **Enforcement** | Load threshold logic inside `pk80005_assignment.assignIt`/`assignItBalanced`, using `get_hearing_days`. |
| **Outcome** | `load_result` is reset to 0, so result code `LOAD` is not recorded and the load check does not block assignment. |
| **Source** | `pk80005_assignment.assignIt` |

---

## BR-PKG2-010 Holiday-shifted hearing date is flagged but non-blocking

| Field | Value |
| --- | --- |
| **Statement** | A hearing date that falls on a non-work day is recorded as a holiday result but does not by itself prevent assignment. |
| **Trigger** | `sp72353_next_work_day(schedule_date) <> schedule_date`. |
| **Enforcement** | Holiday check inside `pk80005_assignment.assignIt`/`assignItBalanced`. |
| **Outcome** | `holiday_result` is incremented and, if the case is otherwise not assigned, result code `NAHOL` is recorded, but the holiday result is excluded from the pass/fail sum in the observed logic.* |
| **Source** | `pk80005_assignment.assignIt` |

---

## BR-PKG2-011 Successful assignment updates case status

| Field | Value |
| --- | --- |
| **Statement** | When every gated conflict check clears, the case is assigned, the schedule is updated, and the case status is advanced. |
| **Trigger** | All gated conflict-check results (employer, adjuster, ALJ, rotation, calendar, vacation, location, load) sum to zero for the candidate attorney. |
| **Enforcement** | `pk80005_assignment.assignIt`/`assignItBalanced`, calling `insert_results`, `updateSchedule`, and `Pk80001_Legalnet.updatecasestatus`. |
| **Outcome** | Result code `CA` is recorded, the `schedule` row is updated with the assigned attorney, and the case status is set to `ASSGN`. |
| **Source** | `pk80005_assignment.assignIt` |

---

## BR-PKG2-012 Assignment-result codes distinguish success from every blocking reason

| Field | Value |
| --- | --- |
| **Statement** | Each assignment attempt is recorded with a specific result code identifying either success or exactly which rule blocked the attempt. |
| **Trigger** | Every call to `assignIt`/`assignItBalanced` for a candidate attorney. |
| **Enforcement** | `pk80005_assignment.insert_results`, called with codes `CA`/`CAC` (success) or `NAEMP`, `NAADJ`, `NAALJ`, `NAATT`, `NAROT`, `NAC`, `NAVAC`, `NAHOL`, `LOAD`, `NALCC` (blocking reasons). |
| **Outcome** | Downstream cursors (`get_results`, `get_assign_results`, `get_assign_list`) filter/interpret rows using these codes to distinguish assigned vs. not-assigned cases. |
| **Source** | `pk80005_assignment.get_results` |

---

## BR-PKG3-001 Letter request update expects a single affected row

| Field | Value |
| --- | --- |
| **Statement** | After calling `UpdateLetterRequest`, `clsLetterRequest.AfterUpdate` checks that exactly one row was affected by the update.* |
| **Trigger** | Saving a `clsLetterRequest` object (letter marked as printed). |
| **Enforcement** | `clsLetterRequest.AfterUpdate` in `Print\clsLetterRequest.vb`.* |
| **Outcome** | A rows-affected count other than 1 indicates the letter-request sequence number did not match exactly one row; calling code handling implies an error/exception path.* |
| **Source** | `Print\clsLetterRequest.vb` |

---

## BR-PKG3-002 Printed date defaults by letter type before update

| Field | Value |
| --- | --- |
| **Statement** | For `RDISC` letters, `_printedDate` is set to the file-create date; for `DEFLT` letters, `_printedDate` is set to today's date, before `UpdateLetterRequest` is called to persist the printed date.* |
| **Trigger** | `PostFill()` runs after a `clsLetterRequest` is retrieved (`SelectLetter`), based on the letter's `LetterTypeCode`. |
| **Enforcement** | `clsLetterRequest.PostFill` in `Print\clsLetterRequest.vb`.* |
| **Outcome** | The value ultimately written via `inPrintedDate` depends on letter type rather than always reflecting the actual print time.* |
| **Source** | `Print\clsLetterRequest.vb` |

---

## BR-PKG3-003 Worker information is scoped to a single legal case

| Field | Value |
| --- | --- |
| **Statement** | `GetWorkerInfo` is always invoked with a single `in_legalCaseSeq` value (`MyCriteria.LegalCaseSeqNum`) and is expected to return worker/claim data for that one legal case.* |
| **Trigger** | `clsLetterRequest.PostFill` calls `GetWorkerInfo()` after the letter request is filled. |
| **Enforcement** | `clsLetterRequest.GetWorkerInfo` (private) in `Print\clsLetterRequest.vb`.* |
| **Outcome** | Merge fields such as claimant name, claim number, and injury date are populated per-legal-case for the letter being printed.* |
| **Source** | `Print\clsLetterRequest.vb` |

## Notes
- Rule enforcement locations and outcomes are read directly from `<RuleData>` attribute registrations and their surrounding validation methods.
- Rules in the `pk80001_legalnet`, `pk80005_assignment`, and `pk82289_legalnet_letters` sections above are derived from real retrieved Oracle PL/SQL source (see [Procedures](procedures/index.md)) rather than from `<RuleData>` attributes; the `pk82289_legalnet_letters` rule statements are additionally marked `*` because only that package's specification (no body) was retrieved.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Operations and processes](operations-processes.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Procedures](procedures/index.md)
- [API reference](api/index.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- `SAIF.Business.Claim.Legal\LegalNet\clsLegalCase.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsLegalSchedule.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsAppeal.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCaseCost.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCaseSearchCriteria.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsConsolidations.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsLegalFileLocation.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsMailDate.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsLegalCaseEvaluation.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCaseOutcome.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsOutcomeIssue.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsOutcomeStaff.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCaseNote.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsAcknowledge.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsOtherLegalParty.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsAttorneyProfile.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsAttorneySchedule.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsAttorneyPolicyAssignment.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsHearingLocation.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsOtherFirm.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsLegalPerson.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsLegalPersonType.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsOutOFTownRotationAssgn.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsAssignmentProcess.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCreateFile.vb`
